package oop;
/*
A.抽象类的特点
    1.抽象类和抽象方法必须用abstract关键字修饰
        * abstract class 类名{...}、
        * public abstract void eat();//抽象方法没有方法体
    2.抽象类不一定有抽象方法，有抽象方法的类一定是抽象类或者接口
    3.抽象类不能实例化，那么抽象类如何实例化：
        * 按照多态的方式，父类引用指向子类对象，由具体的子类实例化，
          其实这也是多态的一种，抽象类多态
    4.抽象类的子类
        * 要么是抽象类
        * 要么重写抽象类中的所有抽象方法


 */
public class Demo_Abstract {
    public static void main(String[] args) {
        //Animal a = new Animal();//抽象类是不能被实例化的
        Animal a = new Cat();
        a.eat();
    }
}
abstract class Animal {//抽象类


    public Animal() {
        System.out.println("父类空参构造");
    }//抽象类也是有构造方法的

    public abstract  void eat();
    //不知道该方法具体是怎么实现的就定义成抽象方法，没有方法体

}
class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃鱼！！！");
        //普通类继承抽象类必须重写抽象类中的所有抽象方法
    }
}
